出处:掘金
原作者:ErpanOmer
在前端性能优化领域,资源提示(Resource Hints)是一种极具价值但常被忽视的手段,而其中 <link rel="preconnect"> 则是最具代表性的优化指令之一。它能够显著降低网络请求的首字节到达时间(TTFB),优化页面关键资源加载路径。本文将从浏览器网络连接过程入手,深入剖析 <link rel="preconnect"> 的作用原理,并展示其在实际工程中的应用价值
在浏览器加载远程资源(如字体、CDN 脚本、API 数据等)时,通常会经历以下网络阶段:
fonts.googleapis.com)解析为 IP 地址每个步骤都存在不可忽视的延迟,尤其是 TCP 和 TLS 建立阶段,对首次请求影响最大。一般情况下,浏览器只有在真正遇到某个资源时,才开始以上连接流程
<link rel="preconnect"> 的本质,是告诉浏览器:
"我很快会从这个域名请求资源,请你现在就建立连接"
一旦浏览器解析到这个标签,它会立刻执行如下动作:
示例代码:
<!-- 提前为 Google Fonts 建立连接 -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
其中第二行的 crossorigin 表示该资源为跨域资源,TLS 握手时需传递 Origin 头部,确保资源使用正确的证书和 CORS 策略
以未使用 preconnect 的流程为基准:
假设:
单就连接建立已消耗 350 ms,还不包含资源传输
而使用 preconnect 后:
这种优化在首屏字体加载、异步 JS 资源加载、第三方 CDN 请求中尤为明显
dns-prefetch、preload 等的区别| 指令 | 作用 | 是否建立 TCP | 是否建立 TLS |
|---|---|---|---|
dns-prefetch |
提前 DNS 查询 | 否 | 否 |
preconnect |
提前建立连接 | 是 | 是(HTTPS) |
prefetch |
预取未来可能使用的资源 | 是 | 是 |
preload |
明确标识当前页面会用到的资源 | 是 | 是 |
可见,preconnect 是在连接建立阶段介入最深的一种
适用场景:
不建议用于:
实践技巧:
<head> 最上方,越早触发越有效crossorigin 属性浏览器支持情况:几乎所有现代浏览器(包括 Chrome、Firefox、Edge、Safari)均原生支持 preconnect。IE 11 不支持,影响可忽略
使用 preconnect 能有效缩短关键资源的 TTFB 时间,从而间接提升:
在 Google PageSpeed Insights、Lighthouse 中都能看到这类提示
<link rel="preconnect"> 是一个简单却极具威力的性能优化工具。它通过提前建立 TCP/TLS 连接,有效压缩了远程资源的加载时间,提升了用户体验和页面响应速度
它不创造连接,但它节省了等待